perm filename PARTZ.F4[MSS,LCS] blob sn#257007 filedate 1977-01-09 generic text, type T, neo UTF8
00100	C THIS AIDS IN EXTRACTING PARTS FROM SCORES. SEE PT1.CMD
00200		COMMON/STF/RSTFAC(-3/4),RSTJ2 /POSI/STFF(-3/4),JJ2,JPQ
00300		1 /IPG/IPG,JPG,BRACK,RSTNUM(8),RPSZ(8),RHGT(8),
00400		1 RCLEF(-3/4) /IVV/NRD(100)
00500		COMMON RS,JA,REST,J2,RQ(18),JX,PR,LX,RDIS
00600	C  ORDER OF COMMON BLOCKS **MUST** STAY AS IS!
00700		COMMON/XRN/RN(3000) /SF/KL,RT,KP,STFSZ,NAMX,EXT
00800		1 /PTR/KWDS(250)/LLL/L,LL,I,IX/XXX/LK,LP,JY /JN/J,N
00900	C  INCREASE DIMENSION OF KWDS (KPN & Q) FOR VERY FULL PAGES.
01000	CC    DIMENSION MM(1500),NN(1500),BARS(509),IWDS(1),STFNM(0/4),
01100	      DIMENSION MM(1500),NN(1500),BARS(509),STFNM(0/4),
01200		1 RSIG(-3/4),RMETER(-3/4),RCL(-3/4)
01300		COMMON /PX/KPN(350) /Q/Q(3500) /KBAR/KBAR(512) 
01400	 	1 /RCLF/KK,CLEF,KW,ITEM,RSTAFF,SN,YN,RNAM,RNAM2,RNAM3
01500		1 /RSP/KNM(10),ENDLN,KQ,NAME,NMPG,SPCNT,LASTNM
01600		DATA FIB/.7/,RSPC/25./,PGNUM/1.6/,RNMHT/16.0/,RNMSZ/1.2/
01700		1 ,RLTRSZ/1.0/,SPCPG/2.7/
01800		EQUIVALENCE (RQ(2),R4),(R5,RQ(3)),(R6,RQ(4)),(R7,RQ(5))
01900		1,(MM,RN),(NN,RN(1501)),(KS,RS),(BARS,KBAR(4)),(IWDS,KBAR(4))
02000		1,(R8,RQ(6)),(R9,RQ(7)),(RQ(10),XLFT),(KBR,KBAR),(T,KBAR(2))
02100		1,(STFNM,KBAR(508))
02200	C  RQ(2) IS R4, RQ(3) IS R5 ETC.  STAFF NAMES START AT KBAR(508)=STF(0)
02300	
02400		JNM=1
02500		KBR=0
02600		NMPG='PAGEA'
02700		JRD=0
02800		ENDLN=0
02900		SAVSIZ=0
03000	
03100		TYPE 3
03200		ACCEPT 2,KS,NTYPE
03300	CC	CALL NAMEXT
03400	2	FORMAT(A5,30I)
03500	3	FORMAT(' TYPE FILE NAME -- '$)
03600	C  TYPE -1 AFTER NAME(I.E.5 SPACES) TO PRINT INST. NAMES AS READ.
03700	CC	IPG=NTYPE-1
03800	CC	IPG=0
03900	C TYPE 1 AFTER NAME FOR 'PAGE' LAYOUT
04000		IF(KS.EQ.' ')KS='OLD'
04100		IF(KS.EQ.'OLD')CALL PT2
04200	CP	IF(IPG)GO TO 144
04300	CX	KNM(1)=KS
04400		NAMZ=KS
04500	CX	JNM=2
04600		JNM=1
04700	CC	DO 644 K=1,100
04800	C NO EDIT FILE NEEDED FOR PAGE LAYOUT INPUT!!!   TYPE 'NAME' 1
04900	CC644	NRD(K)=1
05000	
05100	143	CALL IFILE(1,KS)
05200		READ(1,243)EXT
05300	C  FIRST LINE MUST BE EXTENSION NAME
05400	243	FORMAT(A5,30I)
05500	543	READ(1,243,END=343),KNM(JNM),(KPN(K),K=1,30)
05600		JNM=JNM+1
05700		DO 434 K=1,30
05800		J=KPN(K)
05900		JRD=JRD+1
06000		NRD(JRD)=J
06100	434	IF(J.EQ.0)GO TO 543
06200	
06300	343	KNM(JNM)='ZZZZZ'
06400	CP	IF(IPG)GO TO 744
06500		DO 911 K=1,8
06600		RCLEF(K-4)=99
06700		RCL(K-4)=99
06800		RMETER(K)=99
06900	C  INITS STUFF FOR PAGE LAYOUT
07000	911	RSIG(K)=99
07100		BRACK=0
07200	744	XSIG=FIB
07300		CLEF=-1
07400		XMTR=FIB
07500		XLFT=0
07600		JPG=0
07700		YCLEF=2.
07800		YSIG=2.
07900		YMTR=2.
08000		RSTAFF=0
08100		RM=0
08200	1344	JNM=1
08300		IPG=-1
08400	
08500	CC	XMTR=FIB
08600	CC	XLFT=0
08700	CC	JPG=0
08800	CC	YCLEF=2.
08900	CC	YSIG=2.
09000	CC	YMTR=2.
09100	CC	RSTAFF=0
09200	CC	RM=0
09300	
09400		KQ=0
09500		JRD=0
09600		L=1
09700		LK=1
09800	86	FORMAT(1XA5)
09900	186	FORMAT(1XA5,'.',A3)
10000	
10100	83	NAME=KNM(JNM)
10200		JNM=JNM+1
10300		IF(NAME.EQ.'ZZZZZ')GO TO 20
10400		JRD=JRD+1
10500		NXX=NRD(JRD)
10600	CC	NAMZ=NAME
10700		IF(KBR.EQ.0)GO TO 284
10800		JZ=-1
10900	10	IF(LOOKX(NAME,EXT))GO TO 284
11000		IF(JZ)GO TO 344
11100	C  FOUND NO MORE TO READ
11200	1212	CALL PUTEXT('BARS','PAG')
11300		CALL EXTOUT(KBAR,512)
11400		RSTJ2=SAVSIZ
11500		CALL EXTOUT(RSTFAC,128)
11600		CALL FINEXT
11700	C K (NUM OF BARS - UP TO 511) IS FIRST LOC OF KBAR.
11800		CALL PT2(KPN,Q,KWDS,RN)
11900	344	NAME=NAMZ+256
12000		NAMZ=NAME
12100		JZ=0
12200		IF(LOOKX(NAME,EXT).GE.0)GO TO 10
12300		KNM(1)=NAME
12400	284	JZ=0
12500		SN=0
12600		IF(IPG)SN=200
12700		SNMTR=SN
12800		IF(RM.NE.0)GO TO 277
12900		RM=-1
13000	4	FORMAT(' TYPE INST NAME  '$)
13100		TYPE 4
13200		ACCEPT 2,RNAM,K
13300		RNAM2=0
13400		RNAM3=0
13500		RNAM4=0
13600		IF(K.EQ.0)GO TO 277
13700		TYPE 177
13800		ACCEPT 2,RNAM2,K
13900		IF(K.EQ.0)GO TO 277
14000	C  TYPE NUM AFTER NAME TO ENTER UP TO 4 NAMES.
14100		TYPE 177
14200		ACCEPT 2,RNAM3
14300		TYPE 177
14400		ACCEPT 2,RNAM4
14500	177	FORMAT(' OTHER INST NAME   ',$)
14600	
14700	
14800	277	TYPE 186,NAME,EXT
14900		CALL GETEXT(NAME,EXT)
15000	C  LP IS START OF RN ARRAY THIS TIME
15100		CALL EXTIN(RSTFAC,20)
15200		CALL EXTIN(KWDS,JJ2)
15300		CALL EXTIN(RN,JPQ)
15400		IF(SAVSIZ.EQ.0)SAVSIZ=RSTJ2
15500		IPG=-1
15600	C  IPG MUST BE RESET EACH TIME BECAUSE READIN WIPES IT OUT.
15700	
15800	C  PUT RN INTO Q, JPQ=WDCNT
15900		CALL RLOOP(Q,RN,JPQ)
16000		ITEM=JJ2-2
16100	1211	R=RN(KWDS(1)+3)
16200		K=2
16300		J=0
16400	1111	IF(RN(KWDS(K)+1).GT.2)GO TO 2611
16500	C  SORTS NOTES AND RHYTH ONLY
16600		RA=RN(KWDS(K)+3)
16700		IF(RA.GE.R)GO TO 1011
16800		CALL EXCH(KWDS(K),KWDS(K-1))
16900		J=-1
17000	1011	R=RA
17100	2611	K=K+1
17200		IF(K.LE.ITEM)GO TO 1111
17300		IF(J)GO TO 1211
17400	C NOW ALL SORTED
17500		J=1
17600		KW=1
17700		DO 1311 K=1,ITEM
17800		LS=KWDS(K)
17900		IF(RN(LS+1).GT.2)GO TO 2711
18000		RN(LS+3)=RN(LS+3)-.001
18100	C  MOVE ALL NOTES AND RESTS SLIGHTLY TO LEFT. (FOR SORTER)
18200	CX2711	M=RN(LS)+2
18300	2711	M=RN(LS)+3
18400	CX	DO 1411 N=LS,M+LS
18500	CX	Q(J)=RN(N)
18600	CX1411	J=J+1
18700		CALL RLOOP(Q(J),RN(LS),M)
18800		J=J+M
18900		KPN(K)=KW
19000	1311	KW=KW+M
19100		KPN(ITEM+1)=KW
19200	CC	DO 1511 K=1,ITEM+1
19300	CC1511	KWDS(K)=KPN(K)
19400	CC	DO 1611 K=1,JPQ
19500	CC1611	RN(K)=Q(K)
19600		CALL BLTEM
19700	C  BLTEM BLTS ARRAYS KPN AND Q INTO KWDS AND RN
19800	811	DO 577 K=1,ITEM
19900	CC	J=KWDS(K)
20000	CC	R=RN(J+1)
20100		R=CODEN(KWDS,K,RN,J)
20200		RWD=RN(J)
20300	C RWD IS WDCNT OF EACH ITEM
20400	CP	IF(IPG)GO TO 111
20500	C IPG=-1 = EXTRACTING PARTS, =0  = PAGE LAYOUT.
20600	
20700		GO TO 111
20800	
20900		IF(R.NE.8)GO TO 211
21000		LS=RN(J+2)
21100		STFNM(LS)=0
21200		IF(RWD.LT.7)GO TO 1811
21300		STFNM(LS)=RN(J+9)
21400	1811	IF(ENDLN.NE.0)GO TO 211
21500		JPG=JPG+1
21600		R5=RN(J+2)
21700		RSTNUM(JPG)=R5
21800		RHGT(JPG)=0
21900	 	IF(RWD.GE.2)RHGT(JPG)=RN(J+4)
22000		RPSZ(JPG)=RSTFAC(IFIX(R5))
22100	C***211	RN(J+2)=RN(J+2)*.1
22200	C*** STAFF NUMS WILL NOW BE -.3 UP TO +.4. NO STAFF NAME NEEDED.
22300		IF(R5.EQ.0)SPCNT=SPCPG*RPSZ(JPG)
22400	211	IF(R.NE.4)GO TO 577
22500		IF(RN(J+3).GT.0)GO TO 577
22600		IF(RWD.GE.5)BRACK=RN(J+7)
22700	C  SAVE 'BRACKET' INFO (P7=3,4 OR 5) - CAN FIND WRONG THING!!
22800		GO TO 577
22900	111	IF(R.NE.8)GO TO 677
23000		IF(RWD.LT.7)GO TO 577
23100	C  NO NAME ON THIS STAFF - SO JUMP
23200		IF(RN(J+7).NE.0)GO TO 577
23300	C  SKIPS INVISIBLE STAVES.
23400		XLFT=RN(J+3) 
23500	C LEFT LIMIT OF STAFF
23600		R9=RN(J+9)
23700		IF(NTYPE)TYPE 86,R9
23800		IF(R9.EQ.RNAM)GO TO 977
23900		IF(RNAM2.EQ.R9)GO TO 977
24000		IF(RNAM3.EQ.R9)GO TO 977
24100		IF(RNAM4.NE.R9)GO TO 577
24200	977	I=RN(J+2)+RSTAFF
24300		SN=I
24400		SNMTR=SN
24500		GO TO 477
24600	677	IF(R.NE.10)GO TO 577
24700		IF(RWD.LT.4)GO TO 577
24800		IF(RN(J+6).GT.RNUM)GO TO 577
24900	C  SKIPS PAGE NUMS. (I.E. BIG SIZE)
25000	CC??	IF(RWD.GE.6)P=-1
25100	C  FOUND A NUM. IN BOX ↑↑, REMEMBER IT DID.
25200		GO TO 577
25300		IF(IPG.EQ.0)GO TO 477
25400	CC79	IF(R.NE.16)GO TO 577
25500	CC??	IF(RN(J+5).GE.100)P=-1
25600	C  PICKS UP WORD WITH SZ >100
25700	577	CONTINUE
25800	C  DIDN'T FIND USEFUL INFO SO SKIP THIS FILE
25900	
26000	477	I=JPQ-2
26100	C READS AND WRITES 1 EXTRA WORD
26200	CP	IF(IPG.EQ.0)GO TO 13
26300	
26400	877	NXX=NXX-1
26500		NAME=NAME+2
26600		IF(NXX.NE.0)GO TO 277
26700		JRD=JRD+1
26800		NXX=NRD(JRD)
26900		IF(NXX.NE.0)GO TO 44
27000		NAME=0
27100		NAMZ=0
27200	CC44	KX=1
27300	C ****** RSTAFF NOT NEEDED IN THIS FORM OF PROG.
27400	44	RSTAFF=0
27500	CC	IWDS(1)=1
27600	13	YN=0
27700		IF(SN.NE.200)GO TO 8
27800		YN=-1
27900		IF(YCLEF.GT.1)YCLEF=-1
28000		IF(YSIG.GT.1)YSIG=-1
28100		IF(YMTR.GT.1)YMTR=-1
28200	
28300	8	ZLFT=XLFT+.5
28400		RNUM=PGNUM
28500	C  SIZE FACTOR FOR PAGE NUMBER FINDER (MAYBE).
28600	
28700		DO 6 K=1,ITEM
28800		R5=-1
28900	CC	J=KWDS(K)
29000	CC	R=RN(J+1)
29100		R=CODEN(KWDS,K,RN,J)
29200		IF(R.EQ.0)GO TO 6
29300	C  DUPLICATE BARS WERE CHANGED TO CODE 0
29400		RWD=RN(J)
29500	C RWD IS WDCNT OF EACH ITEM
29600		IF(R.NE.10)GO TO 800
29700		IF(RWD.LT.4)GO TO 80
29800		IF(RN(J+6).GT.RNUM)GO TO 6
29900	C  SKIPS PAGE NUMS. (I.E. BIG SIZE)
30000		IF(RWD.LT.6)GO TO 80
30100	
30200		RN(J+6)=RNMSZ
30300	
30400		RN(J+4)=RNMHT
30500	C  THE ABOVE SET HEIGHT AND SIZE OF REHEARSAL NUMS.
30600		GO TO 810
30700	800	IF(R.NE.4)GO TO 80
30800		IF(RWD.NE.2)GO TO 182
30900	C  FOUND A BAR LINE
31000		RN(J+4)=1
31100		IF(RN(J+3).LT.ZLFT)GO TO 6
31200	C DROPS BAR LINE AT LEFT OF STAFF.
31300		CALL DBAR(K,ITEM,J)
31400		IF(YN.EQ.0)GO TO 810
31500		CALL ADRST(KPN)
31600		GO TO 6
31700	182	RN(J+1)=44
31800	C  CHANGES CODE NUM 
31900		IF(RWD.LT.5)GO TO 80
32000		IF(RN(J+7).GE.3)GO TO 6
32100	C  SKIP HEAVY BRACKETS.
32200		IF(RWD.LT.4)GO TO 80
32300		A=RN(J+6)
32400		IF(A.EQ.0)GO TO 80
32500		IF(A.GE.199)RN(J+6)=200
32600	80	IF(R.NE.16)GO TO 180
32700	CP	IF(IPG.EQ.0)GO TO 180
32800		IF(RN(J+5).GE.100)RN(J+2)=SN
32900	C CATCHES WANTED TEXT ON OTHER LINES.  (P5>100)
33000		IF(RN(J+5).GT.RLTRSZ)RN(J+5)=RLTRSZ
33100	C  LIMITS SIZE OF LETTERS.  ADJUST RLTRSZ TO SUIT. (SET AT 1.0 NOW)
33200	180	RSN=RN(J+2)
33300	CP	IF(IPG)GO TO 2011
33400	CP	ISN=RSN
33500	CP	RSN=SN
33600	C  THE STAFF NUM.
33700	2011	IF(R.NE.3)GO TO 3801
33800	CP	IF(IPG)GO TO 2111
33900	CP	CLEF=RCL(ISN)
34000	CP	GO TO 4801
34100	2111	IF(YCLEF)GO TO 4801
34200		IF(RSN.NE.SN)GO TO 6
34300	CC4801	RR=AMOD(RN(J+5),100.0)
34400	C    ↑↑↑↑↑ BECAUSE SOME CLEFS ARE MINI-CLEFS
34500	CC	IF(RN(J).LT.3)RR=0
34600	4801	RR=CLEFN(RN,J)
34700	C  GET CLEF NUMBER.
34800		IF(RR.EQ.CLEF)GO TO 6
34900	C SKIP DUPLICATE CLEFS.
35000		IF(RR.GT.3)GO TO 4800
35100	
35200	CX	GO TO 17
35300	
35400	CP	IF(IPG)GO TO 16
35500	CP	RCL(ISN)=RR
35600	CP	IF(RCLEF(ISN).EQ.99)RCLEF(ISN)=RR
35700	C  SAVE FIRST CLEF ON EACH STAFF
35800	CP	GO TO 1800
35900	CX16	FORMAT(' CLEF=',F2.0,' --CHANGE TO--',$)
36000	CX	TYPE 16,RR
36100	CX5	FORMAT(F)
36200	CX	ACCEPT 5,RR
36300	17 	R5=RR
36400		CLEF=RR
36500		YCLEF=0
36600		GO TO 1800
36700	4800	IF(RSN.NE.SN)GO TO 6
36800		RN(J+1)=33
36900		GO TO 1800
37000	4802	YCLEF=0
37100	C  CATCHES CLEF AFTER FIRST RESTS.
37200		GO TO 6
37300	3801	IF(R.NE.17)GO TO 3800
37400	CP	IF(IPG)GO TO 2211
37500	CP	XSIG=RSIG(ISN)
37600	CP	GO TO 3802
37700	2211	IF(YSIG)GO TO 3802
37800		IF(RSN.NE.SN)GO TO 6
37900	3802	RR=RN(J+5)
38000		IF(RR.EQ.XSIG)GO TO 6
38100		YSIG=0
38200		XSIG=RR
38300	C SKIPS DUPL. KEY SIGS.
38400	CP	IF(IPG.EQ.0)RSIG(ISN)=RR
38500		GO TO 1800
38600	3800	IF(R.EQ.8)GO TO 6
38700	C  OMIT ALL STAVES FOR NOW
38800		IF(R.NE.18.)GO TO 81
38900	CP	IF(IPG)GO TO 2311
39000		XMTR=RMETER(ISN)
39100		GO TO 1801
39200	2311	IF(YMTR)GO TO 1801
39300		IF(SNMTR.EQ.200.)SNMTR=RSN
39400	C  SO IT WON'T REPEAT METERS.
39500	C  CHECK ALL METERS IF LINE HAS NOT THIS INST.
39600		IF(RSN.NE.SNMTR)GO TO 6
39700	1801	RA=RN(J+5)*100.+RN(J+6)
39800	C  THE TIME SIG.
39900		IF(XMTR.EQ.RA)GO TO 6
40000		XMTR=RA
40100		YMTR=0
40200		IF(IPG.EQ.0)RMETER(ISN)=RA
40300		GO TO 1800
40400	81	IF(RSN.NE.SN)GO TO 6
40500	1800	IF(RN(J+3).LT.XLFT)GO TO 6
40600	C OMIT SOME THINGS TO LEFT OF STAFF BEGINNING.
40700	CP1800	IF(R.NE.7)GO TO 282
40800		IF(RWD.LT.5)GO TO 810
40900		A=ABS(RN(J+7))
41000		IF(A.LT.2.OR.A.GT.7)GO TO 82
41100	C  CATCHES TRILL WIGGLE OVER END OF LINE.
41200	282	IF(R.NE.5)GO TO 810
41300	C NEXT CHECKS FOR SLUR OVER END OF LINE
41400	82	IF(RN(J+6).GE.199.)RN(J+6)=200.
41500	C  ****** 200.0 ABOVE IS SUBJECT TO CHANGE!
41600	810	KL=0
41700		IF(R.GT.2)GO TO 1810
41800	C NEXTS FINDS NOTES AND RESTS WITHOUT RHYTHM (P7 OR P9)
41900		IF(RN(J+3)-PQ.GT.SPCPG)GO TO 1810
42000	C  JUMP IF NOT IN SAME VERT. POS.
42100		IF(RT.NE.R)GO TO 1810
42200	C JUMP IF PREVIOUS ITEM WASN'T THE SAME
42300		RS=9-R*2
42400		IF(RWD.GE.RS)GO TO 1810
42500	C JUMP IF WDCNT IS BIG ENOUGH
42600		KL=RS-RWD
42700	C  SEND THE DIFFERENCE TO THE SUBROUTINE AND ADD A RHYTHM (1.0)
42800	1810	RN(J+2)=0
42900	C  FOR PARTS PUT ALL ON STAFF 0.
43000		CALL QRN(J,KPN,K)
43100	C  PUTS NEEDED THINGS INTO Q ARRAY
43200		RT=R
43300	C  WHAT'S THIS FOR ↑↑?
43400		PQ=RN(J+3)
43500	C SAVE THINGS FOR NEXT TIME AROUND LOOP.
43600	6	CONTINUE
43700	
43800	C******↓↓↓↓↓↓ RHYTH RESET ↓↓↓↓↓↓↓↓
43900		CALL SORT(KPN)
44000	C   SORTS Q ARRAY, PUTS IT BACK INTO RN
44100	23	LL=0
44200	C  TO 'MOVE' INSTEAD OF 'JUSTIFY'
44300		J=1
44400	223	R=CODEN(KWDS,J,RN,K)
44500		IF(R.LE.3.OR.R.EQ.17.OR.R.EQ.18)GO TO 123
44600		J=J+1
44700		GO TO 223
44800	123	R8=ENDLN-RN(K+3)+2
44900	CC	IF(ENDLN.EQ.0)R8=1.-RN(4)
45000		R4=0
45100		R7=0
45200		RS=0
45300		R9=0
45400		R5=10000
45500	C  INSERT??  →→ IF(R8.GT.0)R9=200.
45600	33	CALL PTMOVE(RN,KWDS)
45700	C******* IS KQ SUPPOSED TO BE 0!!!!!!!!?????
45800		CALL SHFT0(KQ)
45900	CCC	ENDLN=ENDLN+200-XLFT
46000	CP	IF(IPG)GO TO 10
46100	20	CALL RESPC
46200		GO TO 1344
46300		END